我們可以透過以下三個問題 hello_world.go 來探討 Go 的背後機制。
package main 是什麼意思?import fmt 是什麼意思?func main是什麼?package main 是什麼意思?package 主要分成兩種,一種是 executable (可執行的);另外一種則是 reusable(可重複使用的),而 package main 就是指可執行的檔案。
因此包含 package main 的 Go 檔案,透過 go build 操作時(像是 hello_world.go),就會產出一個 hello_world.exe,最終電腦是根據這個 exe 檔案去執行相關操作。
此時假設我們創造一個相加的 package,叫做 calculator,我們就會這樣撰寫成這樣
// calculator.go
package calculator
func addTwoNums(num1 int , num2 int )int {
    return num1+num2
}
這樣的 package name 的話,就不會被 Go 認定為可執行檔,因此即便操作 go build calculator.go,也不換產生執行檔,換言之,電腦不會實際跑內部所寫的程式。
此時如果我們要印出 calculator.go 裡面的結果,可以寫一個可執行檔案,寫上package main,並將相關套件 import 進來,像是以下
package main
import (
    'calculator',
    'fmt'
)
func main(){
    fmt.Println(calculator.addTwoNums(3,4))
}
則可以將相關的 package 拿來使用。
import fmt 是什麼意思?延續上一題,這邊就相對好懂了,這個 fmt 就是一個 go 的內建標準 package(像是 python module),當我們下載 Go 的時候,就ㄧ併被下載下來了,因此我們可以直接 import 進來使用。當未來內建標準 package 不夠我們用時,我們開始需要下載其他人的 package 來使用時,就要接著講到 GOPATH 跟 go install 和 go get 了,我們未來會開一篇來討論的~
func main是什麼?這邊筆者也還沒摸透,但簡單來說,就是包含 package main 的檔案中,最終會被執行的相關程式都需要被放在 func main 裡面才會被執行,如果寫在 func main 外頭,就會有以下報錯內容syntax error: non-declaration statement outside function body
簡單來說,就是 Go 限制你不能這樣操作。所以 Go 的寫法是這樣,你在 func main 外面,寫下其他的 function,再一併在 main 內執行。如下示範:
package main
import (
	"fmt"
)
func addTwoNums(num1 int , num2 int )int {
    return num1+num2
}
func main() {
    fmt.Println(addTwoNums(3,4))
}
以上,大致上講解到 Go 程式檔是如何運作,以及內部相關專有名詞的用法與限制~
還請各位大大看有沒有理解錯誤,可以給我一些反饋,感謝!